﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once
#include "GcmpApiDeclaration.h"
#include "NdbDataSchema.h"

namespace gcmp
{
    /// \brief 视图显示模式
    SERIALIZABLE_ENUM_CLASS(ModelViewDisplayMode)
    {
        Solid = 0,                  ///< 实体
        HiddenLine = 1,                 ///< 消隐线
        Wireframe = 2                   ///< 线框
    };

    /// \brief 视图显示配置
    struct ModelViewDisplayOptions
    {
        bool HasLight = true;                       ///< 光照
        bool HasMaterial = true;                    ///< 材质
        bool ShowElementEdges = true;               ///< 显示边
        bool ShowContorLine = false;                ///< 显示轮廓线
        bool CurveBreakEffectEnabled = false;       ///< 是否开启线深度遮挡效果
        bool ShowHiddenLine = false;                ///< 是否显示隐藏线,PS: 请注意，如果启用此功能，只有GraphicsRenderLayer::Model渲染层次会绘制隐藏线，其他的都不会。
        bool KeepNearHiddenLine = true;             ///< 是否保留近的隐藏线（去重是否留近的）。注意：第一次与ShowHiddenLine一起设置一个值后，后续建议不要再修改该值，维持第一次的设置，否则会触发场景重建。
        bool HaloedGapEnabled = false;              ///< 退让效果是否开启

        /* 1)是否开启多重采样， 只有开启多重采样且全局抗锯齿（ICanvasOptions::EnableFullSceneAntiAliasing）开启的情况下， 才会有抗锯齿效果。
         * 2) 注意StatesetMultiSampleEnabled设置的多重采样，不包含文字。（文字比较特殊， 没有开放接口，内部会根据情况设置, 但也受全局抗锯齿开关影响）    
         */
        bool  StatesetMultiSampleEnabled = true; 
    };

    /// \brief 出图模式
    SERIALIZABLE_ENUM_CLASS(ModelViewDrawingMode)
    {
        DrawingModeOff = 0,    ///< 关闭
        DrawingModeOn = 1,     ///< 开启
    };

    /// \brief 形体与ModelView范围的关系
    SERIALIZABLE_ENUM_CLASS(ModelViewRangeRelation)
    {
        InModelViewRange,               ///< 在内部包括与边界相切
        IntersectWithModelViewRange,    ///< 相交或与边界相切
        OutOfModelViewRange,            ///< 在外部且不与边界相切
        UnknownRelation                 ///< 未定义
    } ;

    /// \brief 视图显示详细程度
    SERIALIZABLE_ENUM_CLASS(ModelViewDetailLevel)
    {
        Undefined = -1, ///< 未定义
        Coarse = 0,     ///< 粗略
        Medium = 1,     ///< 中等
        Fine = 2        ///< 精细
    };

    /// \brief 视图显示替换模式
    SERIALIZABLE_ENUM_CLASS(ModelViewReplaceMode)
    {
        None = 0,       ///< 未设置
        General = 1,    ///< 通用模式
        Replace = 2     ///< 备选模式
    };

}
